### 项目四 无源蜂鸣器播放音乐

1.项目介绍

本实验用无源蜂鸣器播放音乐，无源蜂鸣器是通过PWM脉冲宽度调制脉冲进而调节音调，PWM比较多用于调节LED灯的亮度或者调节无源蜂鸣器的频率，或者是电机的转动速度，电机带动的车轮速度也就能很容易控制了，在玩一些Arduino机器人时，更能体现PWM的好处。

音乐除了要“唱的准”，还要“节奏对”，每一个音符的持续时间，就是节拍啦。我们可以用延时多少来设置节拍的，例如：1拍，1秒即1000毫秒；1/2拍，0.5秒即500毫秒；1/4拍，0.25秒即250毫秒；1/8拍，0.125秒即125毫秒….，我们可以试一试组合不同的音调和节拍，看看会有什么不同的效果。

2.模块相关资料

![](./media/image-20250723150952827.png)

- 工作电压：3.3-5V（DC）

- 电流：50MA

- 工作温度：-10摄氏度 到 +50摄氏度

- 尺寸：31.6mmx23.7mm

- 接口：3PIN接口

- 输入信号：数字信号（方波）

3.实验组件

| 控制板 * 1                               | 扩展板 * 1                               | USB线* 1                                 | 无源蜂鸣器模块                           | 3P 转杜邦线母*1                          |
| ---------------------------------------- | ---------------------------------------- | ---------------------------------------- | ---------------------------------------- | ---------------------------------------- |
| ![](./media/image-20250723144253824.png) | ![](./media/image-20250723144304891.png) | ![](./media/image-20250723144313049.png) | ![](./media/image-20250723151211299.png) | ![](./media/image-20250723144330632.png) |

4.模块接线图

![](./media/image-20250723151306598.png)

5.实验程序一 

拖动代码块编写程序：

**寻找代码块**

![](./media/image-20250723151352477.png)

完整的代码如下

![](./media/image-20250723151405571.png)

6.实验程序二 

![](./media/image-20250723151503967.png)

7.实验结果

程序一：上传代码到开发板，蜂鸣器就发出do re mi fa so la si do的声音。

程序二：上传程序到开发板，就会听到无源蜂鸣器先播放“欢乐颂”接着“生日快乐”歌曲；

8.代码说明

在音乐中有两个重要的因素：音调和节拍

![](./media/451a3bf12441df8ff7ea201d36beb352.png):表示无源蜂鸣器信号端是接在D3，管脚设置为3，播放音调为NOTE_C4的声音，节拍为1/4拍。音调是由英文和数字组成的音名，选择不同的音名就能改变不同的音调啦。1（Do）、2(Re)、3(Mi)、4(Fa)、5(Sol)、6(La)、7(Si)是音乐当中的唱名，就对应了音调下拉选项中NOTE_C、NOTE_D、NOTE_E、NOTE_F、NOTE_G。

| 1（Do） | 2（Re） | 3(Mi)  | 4(Fa)  | 5(Sol) | 6(La)  | 7(Si)  |
| ------- | ------- | ------ | ------ | ------ | ------ | ------ |
| NOTE_C  | NOTE_D  | NOTE_E | NOTE_F | NOTE_G | NOTE_A | NOTE_B |

比如

从NOTE_C到NOTE_B，音调是越来越高的；同时把音调改成字母相同时，数字越大，音调越高。

音乐除了要“唱的准”，还要“节奏对”，每一个音符的持续时间，就是节拍，数字越大，持续的时间越长。这里的1拍表示持续时间是1000毫秒，1/2拍表示持续时间是500毫秒，3/4拍表示持续时间是750毫秒，1/4拍表示持续时间是250毫秒，依次类推。

![](./media/image-20250723151717632.png)

![](./media/image-20250723151725449.png)

